Clean Architecture์ ๋์์ธ ํจํด: ์ง์ ๊ฐ๋ฅํ ์ฝ๋ ์ค๊ณ
ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ๋ณด๋ค ์ ์ง๋ณด์ํ๋ ๊ฒ์ด ํจ์ฌ ์ด๋ ต์ต๋๋ค. **ํด๋ฆฐ ์ํคํ ์ฒ(Clean Architecture)**์ ๋์์ธ ํจํด์ ์๊ฐ์ด ์ง๋๋ ์ฝ๋๊ฐ ์ฉ์ง ์๊ณ , ์๊ตฌ์ฌํญ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ ๊ตฌ์กฐ๋ฅผ ์ ์ํฉ๋๋ค.
1. ํด๋ฆฐ ์ํคํ ์ฒ (Clean Architecture)
๋ก๋ฒํธ C. ๋งํด์ด ์ ์ํ ์ด ์ค๊ณ์ ํต์ฌ์ **"๊ด์ฌ์ฌ์ ๋ถ๋ฆฌ"**์ **"์์กด์ฑ์ ๋ฐฉํฅ"**์ ๋๋ค.
- ์์กด์ฑ ๊ท์น: ์์กด์ฑ์ ๋ฐ๋์ ์์ชฝ(๋น์ฆ๋์ค ๋ก์ง)์ผ๋ก๋ง ํฅํด์ผ ํฉ๋๋ค.
- Entities (ํต์ฌ ์ ๋ฌด ๊ท์น): ๊ฐ์ฅ ์์ชฝ ์. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ ์์ํฌ๊ฐ ๋ฐ๋์ด๋ ์ ๋ ๋ณํ์ง ์๋ ํต์ฌ ๋น์ฆ๋์ค ๋ชจ๋ธ์ ๋๋ค.
- Use Cases (์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฌด ๊ท์น): ์์คํ ์ ๋์์ ์ ์ํฉ๋๋ค.
- Adapters & Frameworks: ๊ฐ์ฅ ๋ฐ๊นฅ์ชฝ ์. DB, ์น ํ๋ ์์ํฌ, UI ๋ฑ์ ์ธ์ ๋ ๊ต์ฒด ๊ฐ๋ฅํ ์ธ๋ถ ์ฌํญ์ผ๋ก ์ทจ๊ธํฉ๋๋ค.
2. ์ค๋ฌด์์ ์์ฃผ ์ฐ์ด๋ ๋์์ธ ํจํด
๋์์ธ ํจํด์ ์ ๋ฐฐ ๊ฐ๋ฐ์๋ค์ด ๋ง์ฃผํ๋ ๋ฌธ์ ๋ค์ ๋ํ ๊ฒ์ฆ๋ ํด๊ฒฐ์ฑ ์ ๋๋ค.
โ ์ฑ๊ธํค ํจํด (Singleton)
ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ํ๋๋ง ์์ฑํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ์์ ๊ณต์ ํฉ๋๋ค. ์คํ๋ง์ ๋น(Bean)์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ด ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ๋ฉ๋๋ค.
โก ์ ๋ต ํจํด (Strategy)
์๊ณ ๋ฆฌ์ฆ์ ํด๋์คํํ์ฌ ํ์์ ๋ฐ๋ผ ๋์ ์ผ๋ก ๊ต์ฒดํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๊ฒฐ์ ์๋จ(์นด๋, ์นด์นด์คํ์ด, ํ ์ค)์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ์ ๋ก์ง์ ์คํํ ๋ ์ ์ฉํฉ๋๋ค.
โข ๋น๋ ํจํด (Builder)
๋ณต์กํ ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ์บก์ํํฉ๋๋ค. ๊ฐ๋
์ฑ์ด ๋๊ณ ํ์ํ ํ๋๋ง ์ ํ์ ์ผ๋ก ์ค์ ํ ์ ์์ด ์๋ฐ ๊ฐ๋ฐ์์๊ฒ ํ์์ ์ธ ํจํด์
๋๋ค. (Lombok์ @Builder)
3. ์ ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํด์ผ ํ ๊น?
- ํ ์คํธ ์ฉ์ด์ฑ: ๋น์ฆ๋์ค ๋ก์ง์ด ์ธ๋ถ ํ๋ ์์ํฌ(DB ๋ฑ)์ ๋ถ๋ฆฌ๋์ด ์์ด ํ ์คํธํ๊ธฐ ์ฝ์ต๋๋ค.
- ์ ์ฐ์ฑ: MySQL์ ์ฐ๋ค๊ฐ PostgreSQL๋ก ๋ฐ๊ฟ๋ ํต์ฌ ๋ก์ง์ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.
- ํ์ ํจ์จ: ๊ท์น์ด ๋ช ํํ๋ฏ๋ก ์์ญ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ์์ ํด๋ ์ฝ๋์ ์ผ๊ด์ฑ์ด ์ ์ง๋ฉ๋๋ค.
4. ๊ฒฐ๋ก
์ฒ์๋ถํฐ ์๋ฒฝํ ํด๋ฆฐ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ์ค๋ฒ์์ง๋์ด๋ง์ด ๋ ์ ์์ต๋๋ค. ํ์ง๋ง **"๋น์ฆ๋์ค ๋ก์ง์ ๊ธฐ์ ์ ์ธ๋ถ์ฌํญ์ ์์กดํ์ง ์๋๋ค"**๋ ์์น์ ๊ฐ์ด์ ์๊ธฐ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ฉด, ํจ์ฌ ๋ ๋์ ํ์ง์ ์ํํธ์จ์ด๋ฅผ ๋ง๋ค ์ ์์ ๊ฒ์ ๋๋ค.